package com.situ.service.impl;

import com.situ.dao.EmpDao;
import com.situ.entity.Emp;
import com.situ.service.EmpService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;
/**
 * Emp的服务接口的实现类
 * 
 * @author 胡文 qq:986776
 *
 */
@Service
@CacheConfig(cacheNames="Emp")
public class EmpServiceImpl implements EmpService {
	private final Logger LOG = LogManager.getLogger(this.getClass());

	@Autowired
	private EmpDao empDao;

/**
* 查询....
*/
   // @Cacheable(value = "Emp" ,key ="#value.ename" )   //EMP:刘

@Override
	public List<Emp> find(Emp value) {

		List<Emp> result = empDao.selectEmpByObj(value);

		return result;
	}
    /**
* 根据id查询
*/
    @Cacheable(key = "#id")
	@Override
	public Emp findOne(Integer id) {

		Emp result = empDao.selectEmpById(id);

		return result;
	}

/**
* 添加不为空
*/
    @CacheEvict(allEntries = true)
	@Override
	public Emp saveNotNull(Emp value) {
		if (value == null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行将Emp中属性值不为null的数据保存到数据库-->失败:对象不能为空");
			}
			return value;
		}
		int result = empDao.insertNotNullEmp(value);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行将Emp中属性值不为null的数据保存到数据库-->结果:", result);
		}
		return value;
	}
	@Override
    /**
* 修改不为空
*/
    @CacheEvict(allEntries = true)
	public int updateNotNullById(Emp value) {
		if (value == null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行通过Emp的id更新Emp中属性不为null的数据-->失败:对象为null");
			}
			return 0;
		}
		int result = empDao.updateNotNullEmpById(value);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行通过Emp的id更新Emp中属性不为null的数据-->结果:", result);
		}
		return result;
	}
    /**
* 删除
*/
    @CacheEvict(allEntries = true)
	@Override
	public int deleteById(Integer id) {
		if (id == null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行通过Emp的id删除Emp-->失败:id不能为空");
			}
			return 0;
		}
		int result = empDao.deleteEmpById(id);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行通过Emp的id删除Emp-->结果:", result);
		}
		return result;
	}


}